package com.dragon.modules.yuegou.model.member;

import com.dragon.modules.yuegou.entity.order.GoodsEntity;
import com.dragon.modules.yuegou.enums.SkuType;
import com.dragon.modules.yuegou.model.order.Order;
import com.dragon.modules.yuegou.model.order.OrderPay;
import io.swagger.annotations.ApiModelProperty;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 单品（只有需要自提的商品才拆成单品）模型类
 * 
 * @author pbuilder generated
 * @date 2019-04-29 10:04:20
 * @company sgy
 * @version 2.0
 * @see Length 长度限制
 * @see NotNull 对象非空
 * @see NotEmpty 字符串、集合、表、数组非空
 */
public class PtTurntableExtractGoods extends GoodsEntity {

	@ApiModelProperty("商户")
	private String merchantName;

	@ApiModelProperty("类目")
	private String type;

	@ApiModelProperty("所属模块：0-优选好货-GOODS、1-积分商城-SHOP、2-套餐-PACKAGE、3-商户停车券-MERCHANT、4-限时折扣-LIMITSALES、5-秒杀-SECKILL、6-拼团-COLLAGE、7-助力砍价-HELP、10-套餐子商品-PACKAGE_ITEM、11-奖品-PRIZE、12-到家-TO_HOME")
	private String showModule;

	@ApiModelProperty("昵称")
	private String nickName;

	@ApiModelProperty("手机")
	private String mobile;

	@ApiModelProperty("是否已过期")
	private Boolean expired;

	@ApiModelProperty("商品类型")
	private SkuType skuType;

	@ApiModelProperty("商品规格")
	private List<String> attrs;

	@ApiModelProperty("有效开始时间")
	private LocalDateTime beginTime;

	@ApiModelProperty("有效结束时间")
	private LocalDateTime endTime;

	@ApiModelProperty("商品使用规则")
	private String useRule;

	@ApiModelProperty("订单下其它单品信息")
	private List<PtTurntableExtractGoods> goodsList;

	@ApiModelProperty("订单信息")
	private Order order;

	@ApiModelProperty("创建时间")
	private LocalDateTime createdTime;

	@ApiModelProperty("订单支付信息")
	private OrderPay orderPay;

	@ApiModelProperty("单品状态")
	private Integer status;

	@ApiModelProperty("单品状态")
	private String statusStr;

	@ApiModelProperty("退款原因")
	private String refundReason;

	@ApiModelProperty("单品规则")
	private String attrsStr;

	@ApiModelProperty("商品类型")
	private String showModuleName;

	@ApiModelProperty("使用说明")
	private String info;

	@ApiModelProperty("文字使用说明")
	private String description;

	@ApiModelProperty("使用说明图片列表")
	private String imgs;

	@ApiModelProperty("有效期")
	private String validityDateStr;

	@ApiModelProperty("是否套餐")
	private Boolean packages;

	@ApiModelProperty("是否能退款")
	private Boolean canRefund;

	@ApiModelProperty("跳转id")
	private String jumpId;

	@ApiModelProperty(value = "应付金额")
	private BigDecimal orderFee;

	@ApiModelProperty(value = "优惠金额")
	private BigDecimal discountFee;

	@ApiModelProperty(value = "优惠后金额")
	private BigDecimal needPayFee;

	@ApiModelProperty(value = "支付方式")
	private String payType;

	@ApiModelProperty(value = "门店地址")
	private String address;

	@ApiModelProperty(value = "中奖时间")
	private LocalDateTime prizeTime;

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String getPayType() {
		return payType;
	}

	public void setPayType(String payType) {
		this.payType = payType;
	}

	public String getRefundReason() {
		return refundReason;
	}

	public void setRefundReason(String refundReason) {
		this.refundReason = refundReason;
	}

	public BigDecimal getOrderFee() {
		return orderFee;
	}

	@Override
	public BigDecimal getDiscountAmount() {
		return super.getDiscountAmount();
	}

	@Override
	public void setDiscountAmount(BigDecimal discountAmount) {
		super.setDiscountAmount(discountAmount);
	}

	public void setOrderFee(BigDecimal orderFee) {
		this.orderFee = orderFee;
	}

	public BigDecimal getDiscountFee() {
		return discountFee;
	}

	public void setDiscountFee(BigDecimal discountFee) {
		this.discountFee = discountFee;
	}

	public BigDecimal getNeedPayFee() {
		return needPayFee;
	}

	public void setNeedPayFee(BigDecimal needPayFee) {
		this.needPayFee = needPayFee;
	}

	public Boolean getCanRefund() {
		return canRefund;
	}

	public void setCanRefund(Boolean canRefund) {
		this.canRefund = canRefund;
	}

	public Boolean getPackages() {
		return packages;
	}

	public void setPackages(Boolean packages) {
		this.packages = packages;
	}

	public String getValidityDateStr() {
		return validityDateStr;
	}

	public void setValidityDateStr(String validityDateStr) {
		this.validityDateStr = validityDateStr;
	}

	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public String getImgs() {
		return imgs;
	}

	public void setImgs(String imgs) {
		this.imgs = imgs;
	}

	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}

	public String getShowModuleName() {
		return showModuleName;
	}

	public void setShowModuleName(String showModuleName) {
		this.showModuleName = showModuleName;
	}

	public String getStatusStr() {
		return statusStr;
	}

	public void setStatusStr(String statusStr) {
		this.statusStr = statusStr;
	}

	public OrderPay getOrderPay() {
		return orderPay;
	}

	public void setOrderPay(OrderPay orderPay) {
		this.orderPay = orderPay;
	}

	public LocalDateTime getCreatedTime() {
		return createdTime;
	}

	public void setCreatedTime(LocalDateTime createdTime) {
		this.createdTime = createdTime;
	}

	public Order getOrder() {
		return order;
	}

	public void setOrder(Order order) {
		this.order = order;
	}

	public List<PtTurntableExtractGoods> getGoodsList() {
		return goodsList;
	}

	public void setGoodsList(List<PtTurntableExtractGoods> goodsList) {
		this.goodsList = goodsList;
	}

	public SkuType getSkuType() {
		return skuType;
	}

	public void setSkuType(SkuType skuType) {
		this.skuType = skuType;
	}

	public List<String> getAttrs() {
		return attrs;
	}

	public void setAttrs(List<String> attrs) {
		this.attrs = attrs;
	}

	public LocalDateTime getBeginTime() {
		return beginTime;
	}

	public void setBeginTime(LocalDateTime beginTime) {
		this.beginTime = beginTime;
	}

	public LocalDateTime getEndTime() {
		return endTime;
	}

	public void setEndTime(LocalDateTime endTime) {
		this.endTime = endTime;
	}

	public String getUseRule() {
		return useRule;
	}

	public void setUseRule(String useRule) {
		this.useRule = useRule;
	}

	public Boolean getExpired() {
		return expired;
	}

	public void setExpired(Boolean expired) {
		this.expired = expired;
	}

	public String getMerchantName() {
		return merchantName;
	}

	public void setMerchantName(String merchantName) {
		this.merchantName = merchantName;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getShowModule() {
		return showModule;
	}

	public void setShowModule(String showModule) {
		this.showModule = showModule;
	}

	public String getJumpId() {
		return jumpId;
	}

	public void setJumpId(String jumpId) {
		this.jumpId = jumpId;
	}

	public String getNickName() {
		return nickName;
	}

	public void setNickName(String nickName) {
		this.nickName = nickName;
	}

	public String getMobile() {
		return mobile;
	}

	public void setMobile(String mobile) {
		this.mobile = mobile;
	}

	/**
	 * 构造一个空单品（只有需要自提的商品才拆成单品）模型对象
	 */
	public PtTurntableExtractGoods() {
		super();
	}

	/**
	 * 依据实体对象的信息构造一个单品（只有需要自提的商品才拆成单品）模型对象
	 *
	 * @param entity 实体对象
	 */
	public PtTurntableExtractGoods(GoodsEntity entity) {
		super(entity);
	}

	/**
	 * 依据其它对象的信息构造一个单品（只有需要自提的商品才拆成单品）模型对象
	 *
	 * @param other 其它对象
	 */
	public PtTurntableExtractGoods(PtTurntableExtractGoods other) {
		super(other);
	}

	public String getAttrsStr() {
		return attrsStr;
	}

	public void setAttrsStr(String attrsStr) {
		this.attrsStr = attrsStr;
	}

	@Override
	public String getId() {
		return id;
	}

	/**
	 * 设置单品ID
	 * 
	 * @param id 单品ID
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods id(String id) {
		this.id = id;
		return this;
	}

	@Override
	public String getOrderNo() {
		return orderNo;
	}

	/**
	 * 设置订单号
	 * 
	 * @param orderNo 订单号
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods orderNo(String orderNo) {
		this.orderNo = orderNo;
		return this;
	}

	@Override
	public String getSkuId() {
		return skuId;
	}

	/**
	 * 设置商品ID
	 * 
	 * @param skuId 商品ID
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods skuId(String skuId) {
		this.skuId = skuId;
		return this;
	}

	@Override
	public String getSkuTitle() {
		return skuTitle;
	}

	/**
	 * 设置商品名
	 * 
	 * @param skuTitle 商品名
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods skuTitle(String skuTitle) {
		this.skuTitle = skuTitle;
		return this;
	}

	@Override
	public BigDecimal getSkuPrice() {
		return skuPrice;
	}

	/**
	 * 设置商品单价
	 * 
	 * @param skuPrice 商品单价
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods skuPrice(BigDecimal skuPrice) {
		this.skuPrice = skuPrice;
		return this;
	}

	@Override
	public BigDecimal getSkuOriginalPrice() {
		return skuOriginalPrice;
	}

	/**
	 * 设置原价
	 * 
	 * @param skuOriginalPrice 原价
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods skuOriginalPrice(BigDecimal skuOriginalPrice) {
		this.skuOriginalPrice = skuOriginalPrice;
		return this;
	}

	@Override
	public BigDecimal getSkuDiscountPrice() {
		return skuDiscountPrice;
	}

	/**
	 * 设置折扣价（用这个价格计算）
	 * 
	 * @param skuDiscountPrice 折扣价（用这个价格计算）
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods skuDiscountPrice(BigDecimal skuDiscountPrice) {
		this.skuDiscountPrice = skuDiscountPrice;
		return this;
	}

	@Override
	public BigDecimal getSkuSettlementPrice() {
		return skuSettlementPrice;
	}

	/**
	 * 设置结算价
	 * 
	 * @param skuSettlementPrice 结算价
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods skuSettlementPrice(BigDecimal skuSettlementPrice) {
		this.skuSettlementPrice = skuSettlementPrice;
		return this;
	}

	@Override
	public Integer getSkuPoints() {
		return skuPoints;
	}

	/**
	 * 设置商品积分
	 * 
	 * @param skuPoints 商品积分
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods skuPoints(Integer skuPoints) {
		this.skuPoints = skuPoints;
		return this;
	}

	@Override
	public String getSkuMainImages() {
		return skuMainImages;
	}

	/**
	 * 设置商品图片地址
	 * 
	 * @param skuMainImages 商品图片地址
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods skuMainImages(String skuMainImages) {
		this.skuMainImages = skuMainImages;
		return this;
	}

	@Override
	public Integer getSkuUnit() {
		return skuUnit;
	}

	/**
	 * 设置单位，待确定（商品模块）
	 * 
	 * @param skuUnit 单位，待确定（商品模块）
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods skuUnit(Integer skuUnit) {
		this.skuUnit = skuUnit;
		return this;
	}

	@Override
	public String getSkuAttrs() {
		return skuAttrs;
	}

	/**
	 * 设置SKU规格属性 JSON存储
	 * 
	 * @param skuAttrs SKU规格属性 JSON存储
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods skuAttrs(String skuAttrs) {
		this.skuAttrs = skuAttrs;
		return this;
	}

	@Override
	public BigDecimal getTotalAmount() {
		return totalAmount;
	}

	/**
	 * 设置总金额（amount = price * num)
	 * 
	 * @param totalAmount 总金额（amount = price * num)
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods totalAmount(BigDecimal totalAmount) {
		this.totalAmount = totalAmount;
		return this;
	}

	@Override
	public Integer getTotalPoints() {
		return totalPoints;
	}

	/**
	 * 设置总积分
	 * 
	 * @param totalPoints 总积分
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods totalPoints(Integer totalPoints) {
		this.totalPoints = totalPoints;
		return this;
	}

	@Override
	public String getBusdId() {
		return busdId;
	}

	/**
	 * 设置商圈ID
	 * 
	 * @param busdId 商圈ID
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods busdId(String busdId) {
		this.busdId = busdId;
		return this;
	}

	@Override
	public String getMerchantId() {
		return merchantId;
	}

	/**
	 * 设置商家ID
	 * 
	 * @param merchantId 商家ID
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods merchantId(String merchantId) {
		this.merchantId = merchantId;
		return this;
	}

	@Override
	public String getMemberId() {
		return memberId;
	}

	/**
	 * 设置会员ID
	 * 
	 * @param memberId 会员ID
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods memberId(String memberId) {
		this.memberId = memberId;
		return this;
	}

	@Override
	public Boolean getPickup() {
		return pickup;
	}

	/**
	 * 设置是否已提货
	 * 
	 * @param pickup 是否已提货
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods pickup(Boolean pickup) {
		this.pickup = pickup;
		return this;
	}

	@Override
	public LocalDateTime getPickupStartTime() {
		return pickupStartTime;
	}

	/**
	 * 设置提货开始时间（为空表示无限制）
	 * 
	 * @param pickupStartTime 提货开始时间（为空表示无限制）
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods pickupStartTime(LocalDateTime pickupStartTime) {
		this.pickupStartTime = pickupStartTime;
		return this;
	}

	@Override
	public LocalDateTime getPickupExpireTime() {
		return pickupExpireTime;
	}

	/**
	 * 设置提货超时时间（为空表示永不超时）
	 * 
	 * @param pickupExpireTime 提货超时时间（为空表示永不超时）
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods pickupExpireTime(LocalDateTime pickupExpireTime) {
		this.pickupExpireTime = pickupExpireTime;
		return this;
	}

	@Override
	public LocalDateTime getPickupTime() {
		return pickupTime;
	}

	/**
	 * 设置提货时间
	 * 
	 * @param pickupTime 提货时间
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods pickupTime(LocalDateTime pickupTime) {
		this.pickupTime = pickupTime;
		return this;
	}

	@Override
	public String getMerchantUserId() {
		return merchantUserId;
	}

	/**
	 * 设置商户用户ID（用户自提时由商户用户确认）
	 * 
	 * @param merchantUserId 商户用户ID（用户自提时由商户用户确认）
	 * @return 当前对象
	 */
	public PtTurntableExtractGoods merchantUserId(String merchantUserId) {
		this.merchantUserId = merchantUserId;
		return this;
	}

	public LocalDateTime getPrizeTime() {
		return prizeTime;
	}

	public void setPrizeTime(LocalDateTime prizeTime) {
		this.prizeTime = prizeTime;
	}

}
